package com.example.zjsr.service.impl;

import com.auth0.jwt.internal.org.apache.commons.lang3.StringUtils;
import com.example.zjsr.common.ServerResponse;
import com.example.zjsr.dao.CountDao;
import com.example.zjsr.dao.UserDao;
import com.example.zjsr.domain.Operate;
import com.example.zjsr.domain.User;
import com.example.zjsr.service.JwtLoginService;
import com.example.zjsr.util.JwtUtil;
import com.example.zjsr.util.MD5;
import com.example.zjsr.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * JWT业务验证类
 */
@Service
public class JwtLoginServiceImpl implements JwtLoginService {

    @Autowired
    private UserDao userDao;

    @Autowired
    private CountDao countDao;

    @Autowired
    private RedisUtil redisUtil;

    @Override
    public ServerResponse<String> login(User user) {
        //验证成功返回token
        user.setPassword(MD5.md52(user.getPassword()));
        User u = userDao.checkLoginNameOrEmail(user.getLoginName(),user.getEmail());
        if(u == null){
            return ServerResponse.createByACCOUNTError("登录名不存在");
        }
        //如果登陆成功
        if(u.getPassword().equals(user.getPassword())){
            //使用JWT加密生成token todo
            u.setPassword(StringUtils.EMPTY);//置空密码
            // todo important token有效期10个小时
            String token = JwtUtil.sign(u,60L*2000L*60L*10);//token有效期10小时
            Operate operate=new Operate();
            operate.setOperateStyle("用户登录");
            operate.setOperateUser(u.getUsername());
            if(u.getRoleId()==1){
                operate.setOperateRoot("管理员");
            }else if(u.getRoleId()==2){
                operate.setOperateRoot("教师");
            }else if(u.getRoleId()==3){
                operate.setOperateRoot("评审账户");
            }else if(u.getRoleId()==4){
                operate.setOperateRoot("学生");
            }else{
                operate.setOperateRoot("游客");
            }
            operate.setOperateStatus("成功");
            userDao.insertOperate(operate);
            /**
             * todo 统计网站访问次数：登陆成功后统计次数变量count加1
             */
            // 删除状态模块一、模块二、模块三（删除key格式：用户编号+"module"+1、2、3）
            redisUtil.del(u.getId()+"module"+1,u.getId()+"module"+2,u.getId()+"module"+3);
            redisUtil.del(u.getId()+"category");//删除水果种类名称
            redisUtil.del(u.getId()+"productParameter");//删除直播参数
            redisUtil.set(u.getId()+"",token,2*3600*5);//将用户的id作为key，token作为value放在redis中
            redisUtil.del(u.getId()+"moduleParameter");//删除场景二U3D传场景三U3D
            redisUtil.del(u.getId()+"analyseData");//删除直播复盘数据
            userDao.getUserCount2(user.getLoginName());
            userDao.gettimepassword(user.getLoginName());
            return ServerResponse.createBySuccess(token);
        }
        //每次错误count + 1
        userDao.updateuserCount(user.getLoginName());

        return ServerResponse.createByACCOUNTError("登录密码错误");
    }
}
